home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI2 / LEZIONE5n.s < prev    next >
Text File  |  1994-07-07  |  26KB  |  792 lines

  1.  
  2. ; Lezione5n.s    FUSIONE DI 3 EFFETTI COPPER + FIGURA AD 8 COLORI con
  3. ;        EFFETTI $dff102 e bitplane pointers
  4.  
  5.     SECTION    CiriCop,CODE
  6.  
  7. Inizio:
  8.     move.l    4.w,a6        ; Execbase in a6
  9.     jsr    -$78(a6)    ; Disable - ferma il multitasking
  10.     lea    GfxName(PC),a1    ; Indirizzo del nome della lib da aprire in a1
  11.     jsr    -$198(a6)    ; OpenLibrary
  12.     move.l    d0,GfxBase    ; salvo l'indirizzo base GFX in GfxBase
  13.     move.l    d0,a6
  14.     move.l    $26(a6),OldCop    ; salviamo l'indirizzo della copperlist vecchia
  15.  
  16. ;     PUNTIAMO I NOSTRI BITPLANES
  17.  
  18.     MOVE.L    #PIC,d0        ; in d0 mettiamo l'indirizzo della PIC,
  19.     LEA    BPLPOINTERS,A1    ; puntatori nella COPPERLIST
  20.     MOVEQ    #2,D1        ; numero di bitplanes -1 (qua sono 3)
  21. POINTBP:
  22.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  23.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  24.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  25.     swap    d0        ; scambia le 2 word di d0 (es: 3412 > 1234)
  26.     ADD.L    #40*256,d0    ; + lunghezza bitplane -> prossimo bitplane
  27.     addq.w    #8,a1        ; andiamo ai prossimi bplpointers nella COP
  28.     dbra    d1,POINTBP    ; Rifai D1 volte POINTBP (D1=num of bitplanes)
  29.  
  30.     move.l    #COPPERLIST,$dff080    ; Puntiamo la nostra COP
  31.     move.w    d0,$dff088        ; Facciamo partire la COP
  32.  
  33.     move.w    #0,$dff1fc        ; Disattiva l'AGA
  34.     move.w    #$c00,$dff106        ; Disattiva l'AGA
  35.  
  36.     bsr.w    mt_init        ; Inizializza routine musicale
  37.  
  38. mouse:
  39.     cmpi.b    #$ff,$dff006    ; Siamo alla linea 255?
  40.     bne.s    mouse        ; Se non ancora, non andare avanti
  41.  
  42.     bsr.w    muovicopper    ; barra rossa sotto linea $ff
  43.     bsr.s    CopperDestSin    ; Routine di scorrimento destra/sinistra
  44.     BSR.w    scrollcolors    ; scorrimento ciclico dei colori
  45.     bsr.w    ScorriPlanes    ; scorrimento su-giu della figura
  46.     bsr.w    Ondula        ; Ondulazione tramite molti $dff102
  47.     bsr.w    mt_music    ; Suona la musica
  48.  
  49. Aspetta:
  50.     cmpi.b    #$ff,$dff006    ; Siamo alla linea 255?
  51.     beq.s    Aspetta        ; Se si, non andare avanti, aspetta la linea
  52.                 ; seguente, altrimenti MuoviCopper viene
  53.                 ; rieseguito
  54.  
  55.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  56.     bne.s    mouse        ; se no, torna a mouse:
  57.  
  58.     bsr.w    mt_end        ; Termina la routine musicale
  59.  
  60.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  61.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  62.  
  63.     move.l    4.w,a6
  64.     jsr    -$7e(a6)    ; Enable - riabilita il Multitasking
  65.     move.l    gfxbase(PC),a1    ; Base della libreria da chiudere
  66.     jsr    -$19e(a6)    ; Closelibrary - chiudo la graphics lib
  67.     rts            ; USCITA DAL PROGRAMMA
  68.  
  69.  
  70. ;    Dati
  71.  
  72. GfxName:
  73.     dc.b    "graphics.library",0,0    
  74.  
  75. GfxBase:        ; Qua ci va l'indirizzo di base per gli Offset
  76.     dc.l    0    ; della graphics.library
  77.  
  78. OldCop:            ; Qua ci va l'indirizzo della vecchia COP di sistema
  79.     dc.l    0
  80.  
  81. ; **************************************************************************
  82. ; *        BARRA A SCORRIMENTO ORIZZONTALE (Lezione3h.s)           *
  83. ; **************************************************************************
  84.  
  85. CopperDESTSIN:
  86.     CMPI.W    #85,DestraFlag        ; VAIDESTRA eseguita 85 volte?
  87.     BNE.S    VAIDESTRA        ; se non ancora, rieseguila
  88.     CMPI.W    #85,SinistraFlag    ; VAISINISTRA eseguita 85 volte?
  89.     BNE.S    VAISINISTRA        ; se non ancora, rieseguila
  90.     CLR.W    DestraFlag    ; la routine VAISINISTRA e' stata eseguita
  91.     CLR.W    SinistraFlag    ; 85 volte, riparti
  92.     RTS            ; TORNIAMO AL LOOP mouse
  93.  
  94.  
  95. VAIDESTRA:            ; questa routine sposta la barra verso DESTRA
  96.     lea    CopBar+1,A0    ; Mettiamo in A0 l'indirizzo del primo XX
  97.     move.w    #29-1,D2    ; dobbiamo cambiare 29 wait (usiamo un DBRA)
  98. DestraLoop:
  99.     addq.b    #2,(a0)        ; aggiungiamo 2 alla coordinata X del wait
  100.     ADD.W    #16,a0        ; andiamo al prossimo wait da cambiare
  101.     dbra    D2,DestraLoop    ; ciclo eseguito d2 volte
  102.     addq.w    #1,DestraFlag    ; segnamo che abbiamo eseguito VAIDESTRA
  103.     RTS            ; TORNIAMO AL LOOP mouse
  104.  
  105.  
  106. VAISINISTRA:            ; questa routine sposta la barra verso SINISTRA
  107.     lea    CopBar+1,A0
  108.     move.w    #29-1,D2    ; dobbiamo cambiare 29 wait
  109. SinistraLoop:
  110.     subq.b    #2,(a0)        ; sottraiamo 2 alla coordinata X del wait
  111.     ADD.W    #16,a0        ; andiamo al prossimo wait da cambiare
  112.     dbra    D2,SinistraLoop    ; ciclo eseguito d2 volte
  113.     addq.w    #1,SinistraFlag ; Annotiamo lo spostamento
  114.     RTS            ; TORNIAMO AL LOOP mouse
  115.  
  116.  
  117. DestraFlag:        ; In questa word viene tenuto il conto delle volte
  118.     dc.w    0    ; che e' stata eseguita VAIDESTRA
  119.  
  120. SinistraFlag:        ; In questa word viene tenuto il conto delle volte
  121.     dc.w    0    ; che e' stata eseguita VAISINISTRA
  122.  
  123. ; **************************************************************************
  124. ; *        BARRA ROSSA SOTTO LA LINEA $FF (Lezione3f.s)           *
  125. ; **************************************************************************
  126.  
  127. MuoviCopper:
  128.     LEA    BARRA,a0
  129.     TST.B    SuGiu        ; Dobbiamo salire o scendere?
  130.     beq.w    VAIGIU
  131.     cmpi.b    #$0a,(a0)    ; siamo arrivati alla linea $0a+$ff? (265)
  132.     beq.s    MettiGiu    ; se si, siamo in cima e dobbiamo scendere
  133.     subq.b    #1,(a0)
  134.     subq.b    #1,8(a0)    ; ora cambiamo gli altri wait: la distanza
  135.     subq.b    #1,8*2(a0)    ; tra un wait e l'altro e' di 8 bytes
  136.     subq.b    #1,8*3(a0)
  137.     subq.b    #1,8*4(a0)
  138.     subq.b    #1,8*5(a0)
  139.     subq.b    #1,8*6(a0)
  140.     subq.b    #1,8*7(a0)    ; qua dobbiamo modificare tutti i 9 wait della
  141.     subq.b    #1,8*8(a0)    ; barra rossa ogni volta per farla salire!
  142.     subq.b    #1,8*9(a0)
  143.     rts
  144.  
  145. MettiGiu:
  146.     clr.b    SuGiu        ; Azzerando SuGiu, al TST.B SuGiu il BEQ
  147.     rts            ; fara' saltare alla routine VAIGIU, e
  148.                 ; la barra scedera'
  149.  
  150. VAIGIU:
  151.     cmpi.b    #$2c,8*9(a0)    ; siamo arrivati alla linea $2c?
  152.     beq.s    MettiSu        ; se si, siamo in fondo e dobbiamo risalire
  153.     addq.b    #1,(a0)
  154.     addq.b    #1,8(a0)    ; ora cambiamo gli altri wait: la distanza
  155.     addq.b    #1,8*2(a0)    ; tra un wait e l'altro e' di 8 bytes
  156.     addq.b    #1,8*3(a0)
  157.     addq.b    #1,8*4(a0)
  158.     addq.b    #1,8*5(a0)
  159.     addq.b    #1,8*6(a0)
  160.     addq.b    #1,8*7(a0)    ; qua dobbiamo modificare tutti i 9 wait della
  161.     addq.b    #1,8*8(a0)    ; barra rossa ogni volta per farla scendere!
  162.     addq.b    #1,8*9(a0)
  163.     rts
  164.  
  165. MettiSu:
  166.     move.b    #$ff,SuGiu    ; Quando la label SuGiu non e' a zero,
  167.     rts            ; significa che dobbiamo risalire.
  168.  
  169.  
  170. SuGiu:
  171.     dc.b    0,0
  172.  
  173. ; **************************************************************************
  174. ; *        SCORRIMENTO CICLICO DEI COLORI (Lezione3E.s)           *
  175. ; **************************************************************************
  176.  
  177. Scrollcolors:    
  178.     move.w    col2,col1    ; col2 copiato in col1
  179.     move.w    col3,col2    ; col3 copiato in col2
  180.     move.w    col4,col3    ; col4 copiato in col3
  181.     move.w    col5,col4    ; col5 copiato in col4
  182.     move.w    col6,col5    ; col6 copiato in col5
  183.     move.w    col7,col6    ; col7 copiato in col6
  184.     move.w    col8,col7    ; col8 copiato in col7
  185.     move.w    col9,col8    ; col9 copiato in col8
  186.     move.w    col10,col9    ; col10 copiato in col9
  187.     move.w    col11,col10    ; col11 copiato in col10
  188.     move.w    col12,col11    ; col12 copiato in col11
  189.     move.w    col13,col12    ; col13 copiato in col12
  190.     move.w    col14,col13    ; col14 copiato in col13
  191.     move.w    col1,col14    ; col1 copiato in col14
  192.     rts
  193.  
  194.  
  195. ; **************************************************************************
  196. ; *    SCORRIMENTO IN ALTO E IN BASSO DELLA FIGURA (da Lezione5g.s)       *
  197. ; **************************************************************************
  198.  
  199. ;    Questa routine sposta la figura in alto e in basso, agendo sui
  200. ;    puntatori ai bitplanes in copperlist (tramite la label BPLPOINTERS)
  201.  
  202. ScorriPlanes:
  203.     LEA    BPLPOINTERS,A1    ; Con queste 4 istruzioni preleviamo dalla
  204.     move.w    2(a1),d0    ; copperlist l'indirizzo dove sta puntando
  205.     swap    d0        ; attualmente il $dff0e0 e lo poniamo
  206.     move.w    6(a1),d0    ; in d0 - il contrario della routine che
  207.                 ; punta i bitplanes! Qua invece di mettere
  208.                 ; l'indirizzo lo prendiamo!!!
  209.  
  210.     TST.B    SuGiu3        ; Dobbiamo salire o scendere? se SuGiu e'
  211.                 ; azzerata, (cioe' il TST verifica il BEQ)
  212.                 ; allora saltiamo a VAIGIU, se invece e' a $FF
  213.                 ; (se cioe' questo TST non e' verificato)
  214.                 ; continuiamo salendo (facendo dei sub)
  215.     beq.w    VAIGIU3
  216.     cmp.l    #PIC-(40*18),d0    ; siamo arrivati abbastanza in BASSO?
  217.     beq.w    MettiGiu3    ; se si, siamo in fondo e dobbiamo risalire
  218.     sub.l    #40,d0        ; sottraiamo 40, ossia 1 linea, facendo
  219.                 ; scorrere in BASSO la figura
  220.     bra.s    Finito3
  221.  
  222. MettiGiu3:
  223.     clr.b    SuGiu3        ; Azzerando SuGiu, al TST.B SuGiu il BEQ
  224.     bra.s    Finito3        ; fara' saltare alla routine VAIGIU
  225.  
  226. VAIGIU3:
  227.     cmpi.l    #PIC+(40*130),d0 ; siamo arrivati abbastanza in ALTO?
  228.     beq.s    MettiSu3    ; se si, siamo in fondo e dobbiamo risalire
  229.     add.l    #40,d0        ; Aggiungiamo 40, ossia 1 linea, facendo
  230.                 ; scorrere in ALTO la figura
  231.     bra.s    finito3
  232.  
  233. MettiSu3:
  234.     move.b    #$ff,SuGiu3    ; Quando la label SuGiu non e' a zero,
  235.     rts            ; significa che dobbiamo risalire.
  236.  
  237. Finito3:            ; PUNTIAMO I PUNTATORI BITPLANES
  238.     LEA    BPLPOINTERS,A1    ; puntatori nella COPPERLIST
  239.     MOVEQ    #2,D1        ; numero di bitplanes -1 (qua sono 3)
  240. POINTBP2:
  241.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  242.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  243.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  244.     swap    d0        ; scambia le 2 word di d0 (es: 3412 > 1234)
  245.     ADD.L    #40*256,d0    ; + lunghezza bitplane -> prossimo bitplane
  246.     addq.w    #8,a1        ; andiamo ai prossimi bplpointers nella COP
  247.     dbra    d1,POINTBP2    ; Rifai D1 volte POINTBP (D1=num of bitplanes)
  248.     rts
  249.  
  250.  
  251. ;    Questo byte, indicato dalla label SuGiu, e' un FLAG.
  252.  
  253. SuGiu3:
  254.     dc.b    0,0
  255.  
  256.  
  257. ; **************************************************************************
  258. ; *    EFFETTO DI ONDULAZIONE TRAMITE MOLTI $dff102 (Lezione5h.s)       *
  259. ; **************************************************************************
  260.  
  261.  
  262. Ondula:
  263.     LEA    CON1EFFETTO+8,A0 ; Indirizzo word sorgente in a0
  264.     LEA    CON1EFFETTO,A1    ; Indirizzo delle word destinazione in a1
  265.     MOVEQ    #19,D2        ; 20 bplcon1 da cambiare in COPLIST
  266. SCAMBIA:
  267.     MOVE.W    (A0),(A1)    ; copia due word consecutive - scorrimento!
  268.     ADDQ.W    #8,A0        ; prossima coppia di word
  269.     ADDQ.W    #8,A1        ; prossima coppia di word
  270.     DBRA    D2,SCAMBIA    ; ripeti "SCAMBIA" il numero giusto di VOLTE
  271.  
  272.     MOVE.W    CON1EFFETTO,ULTIMOVALORE ; per rendere infinito il ciclo
  273.     RTS                ; copiamo il primo valore nell'ultimo
  274.                     ; ogni volta.
  275.  
  276. ; **************************************************************************
  277. ; *        ROUTINE CHE SUONA MUSICHE SOUNDTRACKER/PROTRACKER       *
  278. ; **************************************************************************
  279.  
  280.     include    "music.s"    ; routine 100% funzionante su tutti gli Amiga
  281.  
  282. ; **************************************************************************
  283. ; *                SUPER COPPERLIST               *
  284. ; **************************************************************************
  285.  
  286.     SECTION    GRAPHIC,DATA_C
  287.  
  288. COPPERLIST:
  289.  
  290.     ; Facciamo puntare gli sprite a ZERO, per eliminarli, o ce li troviamo
  291.     ; in giro impazziti a disturbare!!!
  292.  
  293.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000
  294.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  295.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  296.     dc.w    $13e,$0000
  297.  
  298.     dc.w    $8e,$2c81    ; DiwStrt    (registri con valori normali)
  299.     dc.w    $90,$2cc1    ; DiwStop
  300.     dc.w    $92,$0038    ; DdfStart
  301.     dc.w    $94,$00d0    ; DdfStop
  302.     dc.w    $102,0        ; BplCon1
  303.     dc.w    $104,0        ; BplCon2
  304.     dc.w    $108,0        ; Bpl1Mod
  305.     dc.w    $10a,0        ; Bpl2Mod
  306.  
  307. ; Per uno schermo a 3 bitplanes: (8 colori)
  308.  
  309.             ; 5432109876543210
  310.     dc.w    $100,%0011001000000000    ; bits 13 e 12 accesi!! (3 = %011)
  311.  
  312. ;    Facciamo puntare i bitplanes direttamente mettendo nella copperlist
  313. ;    i registri $dff0e0 e seguenti qua di seguito con gli indirizzi
  314. ;    dei bitplanes che saranno messi dalla routine POINTBP
  315.  
  316. BPLPOINTERS:
  317.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  318.     dc.w $e4,$0000,$e6,$0000    ;secondo bitplane
  319.     dc.w $e8,$0000,$ea,$0000    ;terzo     bitplane
  320.  
  321. ;    Gli 8 colori della figura qua sono resi piu' "verdi"
  322.  
  323.     dc.w    $0180,$000    ; color0
  324.     dc.w    $0182,$070    ; color1
  325.     dc.w    $0184,$0f0    ; color2
  326.     dc.w    $0186,$0c0    ; color3
  327.     dc.w    $0188,$090    ; color4
  328.     dc.w    $018a,$030    ; color5
  329.     dc.w    $018c,$070    ; color6
  330.     dc.w    $018e,$040    ; color7
  331.  
  332. ;    L'effetto di Lezione3e.s spostato piu' in ALTO
  333.  
  334.     dc.w    $2c07,$fffe    ; aspettiamo la linea 154 ($9a in esadecimale)
  335.     dc.w    $180        ; REGISTRO COLOR0
  336. col1:
  337.     dc.w    $0f0        ; VALORE DEL COLOR 0 (che sara' modificato)
  338.     dc.w    $2d07,$fffe ; aspettiamo la linea 155 (non sara' modificata)
  339.     dc.w    $180        ; REGISTRO COLOR0 (non sara' modificato)
  340. col2:
  341.     dc.w    $0d0        ; VALORE DEL COLOR 0 (sara' modificato)
  342.     dc.w    $2e07,$fffe    ; aspettiamo la linea 156 (non modificato,ecc.)
  343.     dc.w    $180        ; REGISTRO COLOR0
  344. col3:
  345.     dc.w    $0b0        ; VALORE DEL COLOR 0
  346.     dc.w     $2f07,$fffe    ; aspettiamo la linea 157
  347.     dc.w    $180        ; REGISTRO COLOR0
  348. col4:
  349.     dc.w    $090        ; VALORE DEL COLOR 0
  350.     dc.w    $3007,$fffe    ; aspettiamo la linea 158
  351.     dc.w    $180        ; REGISTRO COLOR0
  352. col5:
  353.     dc.w    $070        ; VALORE DEL COLOR 0
  354.     dc.w    $3107,$fffe    ; aspettiamo la linea 159
  355.     dc.w    $180        ; REGISTRO COLOR0
  356. col6:
  357.     dc.w    $050        ; VALORE DEL COLOR 0
  358.     dc.w    $3207,$fffe    ; aspettiamo la linea 160
  359.     dc.w    $180        ; REGISTRO COLOR0
  360. col7:
  361.     dc.w    $030        ; VALORE DEL COLOR 0
  362.     dc.w    $3307,$fffe    ; aspettiamo la linea 161
  363.     dc.w    $180        ; color0... (ora avete capito i commenti,
  364. col8:                ; posso anche smettere di metterli da qua!)
  365.     dc.w    $030
  366.     dc.w    $3407,$fffe    ; linea 162
  367.     dc.w    $180
  368. col9:
  369.     dc.w    $050
  370.     dc.w    $3507,$fffe    ;  linea 163
  371.     dc.w    $180
  372. col10:
  373.     dc.w    $070
  374.     dc.w    $3607,$fffe    ;  linea 164
  375.     dc.w    $180
  376. col11:
  377.     dc.w    $090
  378.     dc.w    $3707,$fffe    ;  linea 165
  379.     dc.w    $180
  380. col12:
  381.     dc.w    $0b0
  382.     dc.w    $3807,$fffe    ;  linea 166
  383.     dc.w    $180
  384. col13:
  385.     dc.w    $0d0
  386.     dc.w    $3907,$fffe    ;  linea 167
  387.     dc.w    $180
  388. col14:
  389.     dc.w    $0f0
  390.     dc.w     $3a07,$fffe    ;  linea 168
  391.  
  392.     dc.w    $0180,$000    ; color0    ; colori reali della figura
  393.     dc.w    $0182,$475    ; color1
  394.     dc.w    $0184,$fff    ; color2
  395.     dc.w    $0186,$ccc    ; color3
  396.     dc.w    $0188,$999    ; color4
  397.     dc.w    $018a,$232    ; color5
  398.     dc.w    $018c,$777    ; color6
  399.     dc.w    $018e,$444    ; color7
  400.  
  401. ;    Effetto copper dell'ondulazione col $dff102 di Lezione5h.s "ristretto"
  402.  
  403.     DC.W    $102
  404. CON1EFFETTO:
  405.     dc.w    $000
  406.     DC.W    $4007,$FFFE,$102,$00
  407.     DC.W    $4407,$FFFE,$102,$11
  408.     DC.W    $4807,$FFFE,$102,$11
  409.     DC.W    $4C07,$FFFE,$102,$22
  410.     DC.W    $5007,$FFFE,$102,$33
  411.     DC.W    $5407,$FFFE,$102,$44
  412.     DC.W    $5807,$FFFE,$102,$66
  413.     DC.W    $5C07,$FFFE,$102,$66
  414.     DC.W    $6007,$FFFE,$102,$77
  415.     DC.W    $6407,$FFFE,$102,$77
  416.     DC.W    $6807,$FFFE,$102,$77
  417.     DC.W    $6C07,$FFFE,$102,$66
  418.     DC.W    $7007,$FFFE,$102,$66
  419.     DC.W    $7407,$FFFE,$102,$55
  420.     DC.W    $7807,$FFFE,$102,$33
  421.     DC.W    $7C07,$FFFE,$102,$22
  422.     DC.W    $8007,$FFFE,$102,$11
  423.     DC.W    $8407,$FFFE,$102,$11
  424.     DC.W    $8807,$FFFE,$102,$00
  425.     DC.W    $8C07,$FFFE,$102
  426. ULTIMOVALORE:
  427.     DC.W    $00
  428.  
  429. ;    EFFETTO DELLA LEZIONE3h.s
  430.  
  431.     dc.w    $9007,$fffe    ; aspettiamo l'inizio della linea
  432.     dc.w    $180,$000    ; grigio al minimo, ossia NERO!!!
  433. CopBar:
  434.     dc.w    $9031,$fffe    ; wait che cambiamo ($9033,$9035,$9037...)
  435.     dc.w    $180,$100    ; colore rosso
  436.     dc.w    $9107,$fffe    ; wait che non cambiamo (Inizio linea)
  437.     dc.w    $180,$111    ; colore GRIGIO (parte dall'inizio linea fino
  438.     dc.w    $9131,$fffe    ; a questo WAIT, che noi cambiaremo...
  439.     dc.w    $180,$200    ; dopo il quale comincia il ROSSO
  440.  
  441. ;        WAIT FISSI (poi grigio) - WAIT DA CAMBIARE (seguiti dal rosso)
  442.  
  443.     dc.w    $9207,$fffe,$180,$120,$9231,$fffe,$180,$301 ; linea 3
  444.     dc.w    $9307,$fffe,$180,$230,$9331,$fffe,$180,$401 ; linea 4
  445.     dc.w    $9407,$fffe,$180,$240,$9431,$fffe,$180,$502 ; linea 5
  446.     dc.w    $9507,$fffe,$180,$350,$9531,$fffe,$180,$603 ; ....
  447.     dc.w    $9607,$fffe,$180,$360,$9631,$fffe,$180,$703
  448.     dc.w    $9707,$fffe,$180,$470,$9731,$fffe,$180,$803
  449.     dc.w    $9807,$fffe,$180,$580,$9831,$fffe,$180,$904
  450.     dc.w    $9907,$fffe,$180,$690,$9931,$fffe,$180,$a04
  451.     dc.w    $9a07,$fffe,$180,$7a0,$9a31,$fffe,$180,$b04
  452.     dc.w    $9b07,$fffe,$180,$8b0,$9b31,$fffe,$180,$c05
  453.     dc.w    $9c07,$fffe,$180,$9c0,$9c31,$fffe,$180,$d05
  454.     dc.w    $9d07,$fffe,$180,$ad0,$9d31,$fffe,$180,$e05
  455.     dc.w    $9e07,$fffe,$180,$be0,$9e31,$fffe,$180,$f05
  456.     dc.w    $9f07,$fffe,$180,$cf0,$9f31,$fffe,$180,$e05
  457.     dc.w    $a007,$fffe,$180,$be0,$a031,$fffe,$180,$d05
  458.     dc.w    $a107,$fffe,$180,$ad0,$a131,$fffe,$180,$c05
  459.     dc.w    $a207,$fffe,$180,$9c0,$a231,$fffe,$180,$b04
  460.     dc.w    $a307,$fffe,$180,$8b0,$a331,$fffe,$180,$a04
  461.     dc.w    $a407,$fffe,$180,$7a0,$a431,$fffe,$180,$904
  462.     dc.w    $a507,$fffe,$180,$690,$a531,$fffe,$180,$803
  463.     dc.w    $a607,$fffe,$180,$580,$a631,$fffe,$180,$703
  464.     dc.w    $a707,$fffe,$180,$470,$a731,$fffe,$180,$603
  465.     dc.w    $a807,$fffe,$180,$360,$a831,$fffe,$180,$502
  466.     dc.w    $a907,$fffe,$180,$250,$a931,$fffe,$180,$402
  467.     dc.w    $aa07,$fffe,$180,$140,$aa31,$fffe,$180,$301
  468.     dc.w    $ab07,$fffe,$180,$130,$ab31,$fffe,$180,$202
  469.     dc.w    $ac07,$fffe,$180,$120,$ac31,$fffe,$180,$103
  470.     dc.w    $ad07,$fffe,$180,$111,$ad31,$fffe,$180,$004
  471.  
  472.     dc.w    $ae07,$fffe
  473.     dc.w    $180,$002
  474.     dc.w    $af07,$fffe
  475.     dc.w    $180,$003
  476.  
  477. ;    Effetto specchio "cilindrico" della Lezione3g.s (+ridefinizione colori)
  478.  
  479.     dc.w    $0182,$235    ; color1
  480.     dc.w    $0184,$99e    ; color2
  481.     dc.w    $0186,$88c    ; color3
  482.     dc.w    $0188,$659    ; color4
  483.     dc.w    $018a,$122    ; color5
  484.     dc.w    $018c,$337    ; color6
  485.     dc.w    $018e,$224    ; color7
  486.  
  487.     dc.w    $b007,$fffe
  488.     dc.w    $180,$004    ; Color0
  489.     dc.w    $102,$011    ; bplcon1
  490.     dc.w    $108,-40*7    ; Bpl1Mod - specchio dimezzato 5 volte
  491.     dc.w    $10a,-40*7    ; Bpl2Mod
  492.     dc.w    $b307,$fffe
  493.  
  494.     dc.w    $180,$006    ; Color0
  495.     dc.w    $102,$022    ; bplcon1
  496.     dc.w    $108,-40*6    ; Bpl1Mod - specchio dimezzato 4 volte
  497.     dc.w    $10a,-40*6    ; Bpl2Mod
  498.  
  499.     dc.w    $b607,$fffe
  500.  
  501.     dc.w    $0182,$245    ; color1
  502.     dc.w    $0184,$9cf    ; color2
  503.     dc.w    $0186,$89c    ; color3
  504.     dc.w    $0188,$669    ; color4
  505.     dc.w    $018a,$132    ; color5
  506.     dc.w    $018c,$347    ; color6
  507.     dc.w    $018e,$234    ; color7
  508.  
  509.     dc.w    $180,$008    ; Color0
  510.     dc.w    $102,$033    ; bplcon1
  511.     dc.w    $108,-40*5    ; Bpl1Mod - specchio dimezzato 3 volte
  512.     dc.w    $10a,-40*5    ; Bpl2Mod
  513.  
  514.     dc.w    $bb07,$fffe
  515.  
  516.     dc.w    $180,$00a    ; Color0
  517.     dc.w    $102,$044    ; bplcon1
  518.     dc.w    $108,-40*4    ; Bpl1Mod - specchio dimezzato 2 volte
  519.     dc.w    $10a,-40*4    ; Bpl2Mod
  520.  
  521.     dc.w    $c307,$fffe
  522.  
  523.     dc.w    $0182,$355    ; color1
  524.     dc.w    $0184,$abf    ; color2
  525.     dc.w    $0186,$9ac    ; color3
  526.     dc.w    $0188,$779    ; color4
  527.     dc.w    $018a,$232    ; color5
  528.     dc.w    $018c,$457    ; color6
  529.     dc.w    $018e,$344    ; color7
  530.     dc.w    $180,$00c    ; Color0
  531.     dc.w    $102,$055    ; bplcon1
  532.     dc.w    $108,-40*3    ; Bpl1Mod - specchio dimezzato
  533.     dc.w    $10a,-40*3    ; Bpl2Mod
  534.  
  535.     dc.w    $d007,$fffe
  536.  
  537.     dc.w    $180,$00e    ; Color0
  538.     dc.w    $102,$066    ; bplcon1
  539.     dc.w    $108,-40*2    ; Bpl1Mod - specchio normale
  540.     dc.w    $10a,-40*2    ; Bpl2Mod
  541.  
  542.     dc.w    $d607,$fffe
  543.     dc.w    $0182,$465    ; color1
  544.     dc.w    $0184,$cdf    ; color2
  545.     dc.w    $0186,$bbc    ; color3
  546.     dc.w    $0188,$889    ; color4
  547.     dc.w    $018a,$232    ; color5
  548.     dc.w    $018c,$557    ; color6
  549.     dc.w    $018e,$444    ; color7
  550.  
  551.     dc.w    $180,$00f    ; Color0
  552.     dc.w    $102,$077    ; bplcon1
  553.     dc.w    $108,-40    ; Bpl1Mod - FLOOD, linee ripetute per
  554.     dc.w    $10a,-40    ; Bpl2Mod - effetto centrale di ingrandimento
  555.  
  556.     dc.w    $da07,$fffe
  557.  
  558.     dc.w    $0182,$355    ; color1
  559.     dc.w    $0184,$abf    ; color2
  560.     dc.w    $0186,$9ac    ; color3
  561.     dc.w    $0188,$779    ; color4
  562.     dc.w    $018a,$232    ; color5
  563.     dc.w    $018c,$457    ; color6
  564.     dc.w    $018e,$344    ; color7
  565.     dc.w    $180,$00e    ; Color0
  566.     dc.w    $102,$066    ; bplcon1
  567.     dc.w    $108,-40*2    ; Bpl1Mod - specchio normale
  568.     dc.w    $10a,-40*2    ; Bpl2Mod
  569.  
  570.     dc.w    $e007,$fffe
  571.  
  572.     dc.w    $0182,$245    ; color1
  573.     dc.w    $0184,$9cf    ; color2
  574.     dc.w    $0186,$89c    ; color3
  575.     dc.w    $0188,$669    ; color4
  576.     dc.w    $018a,$132    ; color5
  577.     dc.w    $018c,$347    ; color6
  578.     dc.w    $018e,$234    ; color7
  579.     dc.w    $180,$00c    ; Color0
  580.     dc.w    $102,$055    ; bplcon1
  581.     dc.w    $108,-40*3    ; Bpl1Mod - specchio dimezzato
  582.     dc.w    $10a,-40*3    ; Bpl2Mod
  583.  
  584.     dc.w    $ed07,$fffe
  585.  
  586.     dc.w    $180,$00a    ; Color0
  587.     dc.w    $102,$044    ; bplcon1
  588.     dc.w    $108,-40*4    ; Bpl1Mod - specchio dimezzato 2 volte
  589.     dc.w    $10a,-40*4    ; Bpl2Mod
  590.  
  591.     dc.w    $f507,$fffe
  592.  
  593.     dc.w    $0182,$235    ; color1
  594.     dc.w    $0184,$99e    ; color2
  595.     dc.w    $0186,$88c    ; color3
  596.     dc.w    $0188,$659    ; color4
  597.     dc.w    $018a,$122    ; color5
  598.     dc.w    $018c,$337    ; color6
  599.     dc.w    $018e,$224    ; color7
  600.     dc.w    $180,$008    ; Color0
  601.     dc.w    $102,$033    ; bplcon1
  602.     dc.w    $108,-40*5    ; Bpl1Mod - specchio dimezzato 3 volte
  603.     dc.w    $10a,-40*5    ; Bpl2Mod
  604.  
  605.     dc.w    $fa07,$fffe
  606.  
  607.     dc.w    $180,$006    ; Color0
  608.     dc.w    $102,$022    ; bplcon1
  609.     dc.w    $108,-40*6    ; Bpl1Mod - specchio dimezzato 4 volte
  610.     dc.w    $10a,-40*6    ; Bpl2Mod
  611.  
  612.     dc.w    $fd07,$fffe
  613.  
  614.     dc.w    $180,$004    ; Color0
  615.     dc.w    $102,$011    ; bplcon1
  616.     dc.w    $108,-40*7    ; Bpl1Mod - specchio dimezzato 5 volte
  617.     dc.w    $10a,-40*7    ; Bpl2Mod
  618.  
  619.     dc.w    $ff07,$fffe
  620.  
  621.     dc.w    $180,$002    ; Color0
  622.     dc.w    $102,$000    ; bplcon1
  623.     dc.w    $108,-40    ; ferma l'immagine per evitare di visualizzare
  624.     dc.w    $10a,-40    ; i byte prima della RAW
  625.  
  626. ;    Effetto della lezione3f.s
  627.  
  628.     dc.w    $ffdf,$fffe    ; ATTENZIONE! WAIT ALLA FINE LINEA $FF!
  629.                 ; i wait dopo questo sono sotto la linea
  630.                 ; $FF e ripartono da $00!!
  631.  
  632.     dc.w    $0107,$FFFE    ; una barretta fissa verde SOTTO la linea $FF!
  633.     dc.w    $180,$010
  634.     dc.w    $0207,$FFFE
  635.     dc.w    $180,$020
  636.     dc.w    $0307,$FFFE
  637.     dc.w    $180,$030
  638.     dc.w    $0407,$FFFE
  639.     dc.w    $180,$040
  640.     dc.w    $0507,$FFFE
  641.     dc.w    $180,$030
  642.     dc.w    $0607,$FFFE
  643.     dc.w    $180,$020
  644.     dc.w    $0707,$FFFE
  645.     dc.w    $180,$010
  646.     dc.w    $0807,$FFFE
  647.     dc.w    $180,$000
  648.  
  649. BARRA:
  650.     dc.w    $0907,$FFFE    ; aspetto la linea $79
  651.     dc.w    $180,$300    ; inizio la barra rossa: rosso a 3
  652.     dc.w    $0a07,$FFFE    ; linea seguente
  653.     dc.w    $180,$600    ; rosso a 6
  654.     dc.w    $0b07,$FFFE
  655.     dc.w    $180,$900    ; rosso a 9
  656.     dc.w    $0c07,$FFFE
  657.     dc.w    $180,$c00    ; rosso a 12
  658.     dc.w    $0d07,$FFFE
  659.     dc.w    $180,$f00    ; rosso a 15 (al massimo)
  660.     dc.w    $0e07,$FFFE
  661.     dc.w    $180,$c00    ; rosso a 12
  662.     dc.w    $0f07,$FFFE
  663.     dc.w    $180,$900    ; rosso a 9
  664.     dc.w    $1007,$FFFE
  665.     dc.w    $180,$600    ; rosso a 6
  666.     dc.w    $1107,$FFFE
  667.     dc.w    $180,$300    ; rosso a 3
  668.     dc.w    $1207,$FFFE
  669.     dc.w    $180,$000    ; colore NERO
  670.  
  671.     dc.w    $FFFF,$FFFE    ; FINE DELLA COPPERLIST
  672.  
  673.  
  674. ; **************************************************************************
  675. ; *            FIGURA AD 8 COLORI 320x256               *
  676. ; **************************************************************************
  677.  
  678.     dcb.b    40*98,0        ; spazio azzerato
  679.  
  680. PIC:
  681.     incbin    "amiga.320*256*3"    ; qua carichiamo la figura in RAW,
  682.                     ; convertita col KEFCON, fatta di
  683.                     ; 3 bitplanes consecutivi
  684.     dcb.b    40*8,0        ; spazio azzerato
  685.  
  686. ; **************************************************************************
  687. ; *                MUSICA PROTRACKER               *
  688. ; **************************************************************************
  689.  
  690. mt_data:
  691.     incbin    "mod.purple-shades"
  692.  
  693.     end
  694.  
  695. ; **************************************************************************
  696.  
  697. Questo listato non e' altro che Lezione4c.s a cui ho aggiunto Lezione4g.s
  698. e Lezione4h.s, le uniche modifiche sono due:
  699. 1) Ho dovuto diminuire l'effetto di "ondulato" come numero di WAIT, per farlo
  700. entrare tra un'effetto e l'altro, passando da 45 a 20.
  701. 2) Ho cambiato la palette della figura nella parte superiore, rendendola verde
  702. come se la figura si "infilasse" dentro l'effetto "scrollColors", e ho
  703. cambiato i colori qua e la' per migliorare (e allungare) la SUPERCOPPERLIST!
  704.  
  705. La vera notita' e' l'inserimento della routine che suona la musica!
  706. Intanto per cominciare anziche' inserirla all'interno del listato ho preferito
  707. utilizzare la direttiva dell'ASMONE "INCLUDE", che mi permette, appunto, di
  708. INCLUDERE un pezzo di listato nel mio listato.
  709. Vediamo dunque come si fa a fornire di musica le nostre produzioni: come prima
  710. cosa bisogna chiarire che la musica e' in un formato particolare, in questo
  711. caso PROTRACKER, non si tratta di un pezzo "CAMPIONATO" col digitalizzatore e
  712. risuonato. Ci sono vari programmi per comporre musiche, il piu' usato e' il
  713. protracker (compatibile soundtracker e noisetracker), che salva la musica
  714. nel formato MOD, infatti spesso le musiche in questo formato cominciano per
  715. MOD. Non e' detto pero' che si debba usare sempre una musica protracker, certi
  716. giochi o demo Amiga, specialmente quelli piu' vecchi, hanno musiche composte
  717. con programmi come MED, OCTAMED, FUTURE COMPOSER, SOUNDMONITOR, OKTALYZER, ma
  718. in tal caso bisogna far "suonare" la musica con la routine addetta a suonare
  719. tali formati musicali. Infatti assieme al programma musicale solitamente c'e'
  720. la routine di REPLAY, che puo' essere inclusa nel listato per risuonarla.
  721. Oggigiorno il 99% delle produzioni Amiga usano musiche Protracker, o comunque
  722. sottospecie del protracker, ossia routines che compattano o ottimizzano un
  723. modulo in formato protracker e lo fanno diventare "prorunner" o "propacker",
  724. dunque in questo corso ho incluso la routine che suona musiche PROTRACKER,
  725. compatibile con moduli NOISETRACKER e SOUNDTRACKER vari, che tra l'altro ho
  726. modificato per renderla compatibile al 100% con i microprocessori 68020+ anche
  727. con le CACHE attive, infatti originariamente questa replay routine aveva dei
  728. problemi con processori troppo veloci che causavano il "taglio" e la "perdita"
  729. di alcune note durante l'esecuzione. Dunque la routine "music.s" suona bene
  730. anche sull'Amiga 4000.
  731. Per utilizzarla basta inserirla nel listato, o col comando "I", oppure potete
  732. caricarla in un'altro buffer di testo e copiarla nel vostro listato.
  733. Personalmente preferisco risparmiare spazio nei listati e la includo con la
  734. direttiva "INCLUDE", che in pratica fa assemblare la routine come se fosse
  735. stata inserita manualmente, ma si risparmiano i 21k della sua lunghezza:
  736. immaginate di avere 5 sorgenti, ed in ognuno volete mettere la musica:
  737.  
  738.     sorgente1.s    12234 bytes
  739.     sorgente2.s    23523 bytes
  740.     sorgente3.s    29382 bytes
  741.     sorgente4.s    78343 bytes
  742.     sorgente5.s    10482 bytes
  743.     sorgente6.s    14925 bytes
  744.     sorgente7.s    29482 bytes
  745.  
  746. Insieme sono lunghi circa 200k, mentre dopo aver aggiunto a tutti i 21k della
  747. REPLAY-ROUTINE occuperebbero complessivamente circa 300k! Mentre aggiungendo
  748. solo la linea
  749.  
  750.     include    "music.s"
  751.  
  752. L'aumento sarebbe di pochi bytes, e il risultato lo stesso.
  753. L'unico particolare e' che, come nell'INCBIN, bisogna trovarsi nella directory
  754. dove si trova il file da includere, o bisogna scrivere tutto il percorso:
  755.  
  756.     include    "df0:sorgenti2/music.s"
  757.  
  758. Una volta all'interno del listato, tramite INCLUDE o inserimento, la routine
  759. va fatta funzionare. FACILISSIMO! Basta eseguire "mt_init" prima del loop
  760. MOUSE per inizializzarla, eseguire un "mt_music" ogni FOTOGRAMMA per suonare,
  761. ed eseguire mt_end" alla fine prima di uscire per terminare e chiudere i canali
  762. audio:
  763.  
  764.     bsr.w    mt_init        ; Inizializza routine musicale
  765.  
  766. mouse:
  767.     cmpi.b    #$ff,$dff006    ; Siamo alla linea 255?
  768.     bne.s    mouse        ; Se non ancora, non andare avanti
  769.  
  770.     bsr.w    MiaRoutineGrafica
  771.     bsr.w    mt_music
  772.  
  773.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  774.     bne.s    mouse        ; se no, torna a mouse:
  775.  
  776.     bsr.w    mt_end        ; Termina la routine musicale
  777.  
  778. La musica ovviamente deve essere caricata, basta caricarla con INCBIN alla
  779. label "mt_data":
  780.  
  781. mt_data:
  782.     incbin    "mod.purple-shades"
  783.  
  784. La musica presente nel disco del corso e' di HI-LITE dei VISION FACTORY, una
  785. musica di qualche annetto fa, la ho scelta anche perche' e' lunga solo 13k!
  786. Se volete far suonare una vostra musica basta caricarla con l'INCBIN:
  787.  
  788.  
  789. mt_data:
  790.     incbin    "df1:modules/mod.MIAMUSICA"    ; ad esempio!
  791.  
  792.